/**
 * Author@ Cheng Feitian
 * Date: 2021-4-8
 * Description: 函数模版的用法：
 * 
 * template<typename T>
 * 函数声明或定义
 * 
 */

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;
const int maxn = 1024;

//交换两个整型函数
void swapInt(int &a,int &b){
    int temp = a;
    a = b;
    b = temp;
}

//交换两个浮点型
void swapDouble(double &a,double &b){
    double temp = a;
    a = b;
    b = temp; 
}

//函数模板
template<typename T>    //声明一个模板，告诉编译器后面代码中紧跟着的T不要报错，T是一个通用数据类型
void mySwap(T &a,T &b){
    T temp = a;
    a = b;
    b = temp;
}

void test01(){
    int a = 10;
    int b = 20;
    // swapInt(a,b);
    //利用函数模版进行交换
    //两种方式使用函数模板
    //1.自动类型推导
    mySwap(a,b);
    //2.显示指定类型
    mySwap<int>(a,b);
    cout << "a = " << a << "\tb = " << b << endl;

    // double c = 1.1,d = 2.2;
    // swapDouble(c,d);
    // cout << "c = " << c << "\td = " << d << endl;
}



int main()
{
    test01();
    return 0;
}
